package yerr

import (
	"fmt"
	"strings"
)

type YCode int

func (c YCode) Error(msg ...string) error {
	return NewCode(c).WithMsg(strings.Join(msg, " "))
}

func (c YCode) Errorf(format string, args ...interface{}) error {
	return NewCode(c).WithMsg(fmt.Sprintf(format, args...))
}

const (
	ErrSuccess YCode = iota
	ErrUnknown YCode = iota + 1000 // 未知错误

	ErrBiz               YCode = iota + 2000 // 业务错误
	ErrBizParamRequired                      // 参数缺失
	ErrBizParamInvalid                       // 参数无效
	ErrBizTypeInvalid                        // 类型无效
	ErrBizPluginNotFound                     // 插件未找到
	ErrBizTypeNotMatch                       // 类型不匹配
	ErrBizNotSupport                         // 不支持
	ErrBizNotImplemented                     // 未实现

	ErrData         YCode = iota + 3000 // 数据错误
	ErrDataNotfound                     // 数据未找到
	ErrDataConflict                     // 数据冲突
	ErrDataRepeat                       // 数据重复
	ErrDataEmpty                        // 数据为空
	ErrDataExists                       // 数据存在
)
